package top.fwpsl.jvm;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author: 风戏fw
 * @date: 2022/8/24
 * @description: 正则表达式
 */
public class RegexUtil {

    /**
     * 创建 Matcher 对象
     *
     * @param regex 正则表达式
     * @param decStr 要匹配的字符串
     * @return
     */
    public static Matcher matcher(String regex, String decStr) {
        return matcher(regex, decStr, null);
    }

    /**
     * 创建 Matcher 对象
     *
     * @param regex 正则表达式
     * @param decStr 要匹配的字符串
     * @param flags 匹配标志
     * @return
     */
    public static Matcher matcher(String regex, String decStr, Integer flags) {
        // 表达式对象
        Pattern p;
        if (flags == null) {
            p = Pattern.compile(regex);
        } else {
            p = Pattern.compile(regex, flags);
        }

        // 创建 Matcher 对象
        return p.matcher(decStr);
    }

    /**
     * 验证传入的字符串是否整个匹配正表达式
     *
     * @param regex: 正则表达式
     * @param decStr：要匹配的字符串
     * @return ：若匹配，则返回true;否则，返回false;
     */
    public static boolean validate(String regex, String decStr) {
        return matcher(regex, decStr, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE).matches();
    }

    /**
     * 获取所有匹配结果
     *
     * @param matcher
     * @return
     */
    public static List<MatchResult> getMatchResult(Matcher matcher) {
        List<MatchResult> matchResultList = new ArrayList<>();

        if (matcher == null) {
            return matchResultList;
        }

        while (matcher.find()) {
            matchResultList.add(matcher.toMatchResult());
        }

        return matchResultList;
    }
}
